package com.oa.system.utils;

/**
 * @author Admin
 * @title: MenuHelper
 * @projectName Cloud_OA_Office
 * @description: MenuHelper
 * @date 2024/10/5 19:42
 */

import com.oa.model.system.SysMenu;

import java.util.ArrayList;
import java.util.List;

/**
 * 根据菜单数据构建菜单数据
 */
public class MenuHelper {
    public static List<SysMenu> buildTree(List<SysMenu> allSysMenuList) {
        //找到递归入口 和 结束条件
        //创建list集合 用于最终数据
        List<SysMenu> treeList = new ArrayList<>();
        //遍历所有菜单数据
        for (SysMenu sysMenu : allSysMenuList) {
            //递归入口进入  如果是顶级菜单
            if (sysMenu.getParentId().longValue() == 0) {
                treeList.add(findChildren(sysMenu, allSysMenuList));
            }
        }
        return treeList;
    }

    /**
     * 递归查找子节点
     *
     * @param sysMenu
     * @param allSysMenuList
     * @return
     */
    public static SysMenu findChildren(SysMenu sysMenu, List<SysMenu> allSysMenuList) {
        sysMenu.setChildren(new ArrayList<SysMenu>());
        //比较id 与下层parentId是否相等 判断结束
        for (SysMenu it : allSysMenuList) {
            if (sysMenu.getId().longValue() == it.getParentId().longValue()) {
                //判断是否为空
                if (sysMenu.getChildren() == null) {
                    sysMenu.setChildren(new ArrayList<SysMenu>());
                }
                //递归构建
                sysMenu.getChildren().add(findChildren(it, allSysMenuList));
            }
        }
        return sysMenu;
    }
}
